package com.changgou.test;

import org.junit.Test;

public class Demo {

    private String get(int num) {
        String a = "";//用字符串拼接
        while (num != 0) {//利用十进制转二进制除2法
            a = num % 2 + a;
            num = num / 2;
        }
        return a;
    }

    /**
     * 位运算, 与 &
     * 两个操作数中,位都为1,则为1.否则都为0;
     * a: 10000000
     * b: 10000001
     * =: 10000000
     */
    // @Test
    public void test01() {
        int a = -5;
        int b = -6;
        System.out.println(a+"&"+b+": "+ (a & b));
    }

    /**
     * 位运算, 或 |
     * 两个操作数中,位有一个为1,则为1;
     */
    // @Test
    public void test02() {
        int a = 128;
        int b = 129;
        System.out.println(a | b);
    }

    // @Test
    public void test06() {
        int a = -5;
        int b = -6;
        System.out.println(a & b);
        System.out.println(a | b);
        System.out.println(a ^ b);
    }

    /**
     * 位运算, 非 ~  对二进制的各位数,取反.
     * <p>
     * 5：      00000000 00000000 00000000 00000101
     * ~5：     11111111 11111111 11111111 11111010 // 补码形式
     * 11111111 11111111 11111111 11111001 // 反码
     * 10000000 00000000 00000000 00000110 // 原码
     * 负数是正数取反码加1
     */
    // @Test
    public void test03() {
        int a = 5;
        System.out.println(get(a));
        System.out.println(~a);
    }

    /**
     * 位运算,异或 ^ ,某位不同则为1,相同则为0
     */
    // @Test
    public void test05() {
        int a = 5;
        int b = 6;
        System.out.println(5 ^ 6);
    }

    /**
     * << 左移2个位.
     * 3: 00000000 00000000 00000000 00000011
     * 00000000 00000000 00000000 00001100
     */
    // @Test
    public void test04() {
        System.out.println(3 << 2);
    }

    // 二进制高位数为1 表示负数, 0 表示正数
    // 反码是为了解决,正负数相加不为0的问题.
    //      1+(-1)=-2的问题.
    //      0001 + 1001 =1010  =>-2
    // 反码:
    //      正数的反码为原码
    //      负数的反码为 除了符号位,其它按位取反.
    // 补码:
    //      正数: 补码等于本身
    //      负数: 补码是等于反码+1
    // 原码:



    @Test
    public void test07() {
        String a = "hah";
        switch (a) {
            case "a":
                System.out.println("1");
                break;
        }

        short s1 = 1;
        // s1 = s1 + 1;
        s1 += 1;
    }
}
